{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# Gym 介绍\n",
    "前面我们简单的介绍了强化学习的例子，从这个例子可以发现，构建强化学习的环境非常麻烦，需要耗费我们大量的时间，这个时候我们可以使用一个开源的工具，叫做 gym，是由 open ai 开发的。\n",
    "\n",
    "在这个库中从简单的走格子到毁灭战士，提供了各种各样的游戏环境可以让大家放自己的 AI 进去玩耍。取名叫 gym 也很有意思，可以想象一群 AI 在健身房里各种锻炼，磨练技术。\n",
    "\n",
    "使用起来也非常方便，首先在终端内输入如下代码进行安装。\n",
    "\n",
    "```\n",
    "# Github源\n",
    "git clone https://github.com/openai/gym\n",
    "cd gym\n",
    "pip install -e .[all]\n",
    "\n",
    "# 直接下载gym包\n",
    "pip install gym[all]\n",
    "```\n",
    "\n",
    "我们可以访问这个页面看到 gym 所[包含的环境和介绍](https://github.com/openai/gym/wiki)。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在上面的环境页面，可以 gym 内置了很多环境，我们可以使用前面讲过的 q learning 尝试一个 gym 中的小例子，[mountain car](https://github.com/openai/gym/wiki/MountainCar-v0)。在 mounttain car，我们能够观察到环境中小车的位置，也就是坐标，我们能够采取的动作是向左或者向右。\n",
    "\n",
    "为了使用 q learning，我们必须要建立 q 表，而这里的状态空间是连续不可数的，所以我们需要离散化连续空间，将 x 坐标和 y 坐标都平均分成很多份，具体的实现可以运行 `mount-car.py` 看看结果。\n",
    "\n",
    "如果运行完之后，可以看到 q 表的收敛非常慢，reward 一直都很难变化，我们需要很久才能将小车推到终点，这个时候我们需要一个更加强大的武器，那就 deep q network。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
